home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / pao / towns / paolib / sample / vtc.c < prev    next >
Text File  |  1991-10-18  |  7KB  |  255 lines

  1. /** << High C >> **************************************************************
  2. **
  3. **    割り込みテストプログラム
  4. **
  5. **    < History >
  6. **    1990.06.12 : CREATE
  7. **
  8. **    < note > : TABS = 4
  9. **
  10. **    Programmed by Y.Hirata ( Nifty ID : NAB03321 )
  11. **
  12. ******************************************************************************/
  13.  
  14. pragma    Off (Floating_point) ;
  15.  
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18. #include <string.h>
  19. #include <time.h>
  20. #include <egb.h>
  21. #include <snd.h>
  22. #include <mos.h>
  23. #include <fmc.h>
  24. #include "hc.h"
  25. #include "key.h"
  26.  
  27. long     Icount ;                            /*  カウンタ                        */
  28.  
  29. #define    GworkSize    1536                    /*  グラフィック作業域のサイズ            */
  30. char    Gwork[GworkSize] ;                    /*  グラフィック作業域                */
  31. #define    SworkSize    16384                    /*  サウンド作業域のサイズ            */
  32. char    Swork[SworkSize] ;                    /*  サウンド作業域                    */
  33. #define    MworkSize    4096                    /*  マウス作業域のサイズ                */
  34. char    Mwork[MworkSize] ;                    /*  マウス作業域                    */
  35. int        X=0, Y=0, Bot ;                        /*  マウス情報格納                    */
  36.  
  37. /***************************  割り込み Handler  ******************************/
  38. static int int_handler( void )
  39. {
  40.     Icount ++ ;
  41.     return( 0 ) ;
  42. }
  43.  
  44. /*********************************  初期化  **********************************/
  45. void gsminit()
  46. {
  47.     TEXT_init( Gwork,GworkSize ) ;        /* EGB 初期化                        */
  48.     GRP_viewport( 0,0,1023,511 ) ;        /* View Port SET                    */
  49.     TEXT_cursor( TRUE ) ;                /* カーソル表示                            */
  50. /*
  51. **    MOS_start() は、 SND_init() の後にすること。
  52. */
  53.     SND_init( Swork ) ;                    /* SND初期化        */
  54.     MOS_start( Mwork,MworkSize ) ;        /* MOS初期化        */
  55.  
  56.     MOS_disp( FALSE ) ;                    /* マウス非表示                        */
  57. }
  58.  
  59. /***************************  割り込み用カンウタ値表示  **************************/
  60. void loop( int func )
  61. {
  62.     TEXT_color( C_WHITE ) ;
  63.     do {
  64.         MOS_rdpos( &Bot,&X,&Y ) ;
  65.         if ( Bot == MOS_LEFT ) {
  66.             TEXT_printf( "                    " ) ;
  67.             TEXT_printf( "MOUSE button : LEFT  on <Icount:%ld>\n",Icount ) ;
  68.         } else if ( Bot == MOS_RIGHT ) {
  69.             TEXT_printf( "                    " ) ;
  70.             TEXT_printf( "MOUSE button : RIGHT on <Icount:%ld>\n",Icount ) ;
  71.         } else if ( Bot == MOS_BOTH ) {
  72.             TEXT_printf( "                    " ) ;
  73.             TEXT_printf( "MOUSE button : BOTH  on <Icount:%ld>\n",Icount ) ;
  74.             break ;
  75.         }
  76.         switch ( func ) {
  77.         case 1 :
  78.             TEXT_printf( "FMC Timer : %ld\n",Icount ) ;
  79.             break ;
  80.         case 2 :
  81.             TEXT_printf( "VSYNC : %ld\n",Icount ) ;
  82.             break ;
  83.         case 3 :
  84.             TEXT_printf( "FM音源 タイマB : %ld\n",Icount ) ;
  85.             break ;
  86.         default :
  87.             TEXT_printf( "??? : %ld\n",Icount ) ;
  88.         }
  89.     } while ( Bot != MOS_BOTH ) ;
  90. }
  91.  
  92. /*************************  割り込みテストプログラム  ************************/
  93. void main()
  94. {
  95.     struct _ENCODE    encode ;
  96.     union _MOJI    moji ;
  97.     int        func = 0 ;
  98.     unsigned timeno ;
  99.     int ret ;
  100.     char *ofptr ;
  101.     unsigned int    secph, sec, min, hour ;
  102.  
  103.     gsminit() ;
  104.  
  105.     switch ( func ) {
  106.     case 1 :
  107.     case 2 :
  108.     case 3 :
  109.         Icount = 0 ;
  110.         TEXT_printf( "\nIcount = %ld\n",Icount ) ;
  111.     }
  112.  
  113.     TEXT_color( C_HYELLOW ) ;
  114.     TEXT_printf( "割り込みテスト開始 :\n" ) ;
  115.     while ( TRUE ) {
  116.         TEXT_color( C_HGREEN ) ;
  117.         TEXT_printf( "\n試験したい割り込みを番号で選択して下さい。\n" ) ;
  118.         TEXT_color( C_WHITE ) ;
  119.         TEXT_printf( "<1>FMC TIMER, <2>VSYNC, <3>FM音源 タイマB <0>終了 ? " ) ;
  120.         TEXT_color( C_HWHITE ) ;
  121.         while ( TRUE ) {
  122.             moji.x = KYB_read( 0,(unsigned int *)&encode ) ;
  123.             if ( moji.hl.l >= '0' && moji.hl.l <= '3' ) {
  124.                 func = moji.hl.l - '0' ;
  125.                 TEXT_printf( "%c\n",moji.hl.l ) ;
  126.                 break ;
  127.             }
  128.         }
  129.         if ( func == 0 ) {
  130.             TEXT_color( C_HGREEN ) ;
  131.             TEXT_printf( "\n割り込みテスト終了!\n" ) ;
  132.             break ;
  133.  
  134.         } else if ( func == 1 ) {
  135. /*
  136. **    FMC TIMER (インターバルタイマ)
  137. */
  138.             TEXT_color( C_HYELLOW ) ;
  139.             TEXT_printf( "\n< FMC TIMER 割り込み処理 >\n" ) ;
  140.             TIM_TIME timer ;
  141.             timer.mode = 0 ;
  142.             timer.inf = 0 ;
  143.             BSETCODEADR( (char *)&timer.adr,int_handler ) ;
  144.             timer.hcycle = 0x00 ;
  145.             timer.lcycle = 1 ;            /* 10ms     */
  146.             ret = TIM_settime( &timer, (int *)&timeno ) ;
  147.             TEXT_color( C_LIGHTBLUE ) ;
  148.             TEXT_printf( "Time_settime() = %xh, timeno=%xh\n",ret,timeno ) ;
  149.  
  150.             KYB_clrbuf() ;                        /*  バッファクリア            */
  151.             TEXT_color( C_HGREEN ) ;
  152.             TEXT_printf( "\n何かキーを押して下さい。 \n" ) ;
  153.             TEXT_printf( "マウスのボタンを左右同時に押すと終了します。\n" ) ;
  154.             moji.x = KYB_read( 0,(unsigned int *)&encode ) ;
  155.             Icount = 0 ;
  156.             loop( func ) ;
  157.  
  158.             ret = TIM_clrtime( timeno ) ;
  159.             TEXT_color( C_LIGHTBLUE ) ;
  160.             TEXT_printf( "TIM_clrtime() = %xh\n",ret ) ;
  161.             TEXT_printf( "FMC Timer <END!> : %ld\n",Icount ) ;
  162.             secph = Icount % 100 ;
  163.             sec   = Icount / 100 ;
  164.             min   = sec / 60 ;
  165.             hour  = min / 60 ;
  166.             sec   %= 60 ;
  167.             min   %= 60 ;
  168.             TEXT_color( C_HYELLOW ) ;
  169.             TEXT_printf( "elaps time : %02d:%02d:%02d.%02d (Icount:%ld)\n",
  170.                     hour,min,sec,secph,Icount ) ;
  171.  
  172.         } else if ( func == 2 ) {
  173. /*
  174. **    VSYNC
  175. */
  176.             TEXT_color( C_HYELLOW ) ;
  177.             TEXT_printf( "\n< VSYNC 割り込み処理 >\n" ) ;
  178.             VSYNC_entry = int_handler ;
  179.             VSYNC_init() ;
  180.  
  181.             KYB_clrbuf() ;                        /*  バッファクリア            */
  182.             TEXT_color( C_HGREEN ) ;
  183.             TEXT_printf( "\n何かキーを押して下さい。 \n" ) ;
  184.             TEXT_printf( "マウスのボタンを左右同時に押すと終了します。\n" ) ;
  185.             moji.x = KYB_read( 0,(unsigned int *)&encode ) ;
  186.             Icount = 0 ;
  187.             loop( func ) ;
  188.  
  189.             VSYNC_end() ;
  190.             TEXT_color( C_LIGHTBLUE ) ;
  191.             TEXT_printf( "VSYNC <END!> : %ld\n",Icount ) ;
  192.             secph = ((Icount%60)*1000) / 60 ;
  193.             /*        四捨五入    */
  194.             if ( secph % 10 < 5 )
  195.                 secph /= 10 ;
  196.             else
  197.                 secph = secph / 10 + 1 ;
  198.             sec   = Icount / 60 ;
  199.             min   = sec / 60 ;
  200.             hour  = min / 60 ;
  201.             sec   %= 60 ;
  202.             min   %= 60 ;
  203.             TEXT_color( C_HYELLOW ) ;
  204.             TEXT_printf( "elaps time : %02d:%02d:%02d.%02d (Icount:%ld)\n",
  205.                     hour,min,sec,secph,Icount ) ;
  206.  
  207.         } else if ( func == 3 ) {
  208. /*
  209. **    FM音源タイマB
  210. */
  211.             TEXT_color( C_HYELLOW ) ;
  212.             TEXT_printf( "\n< FM音源タイマB 割り込み処理 >\n" ) ;
  213.             ofptr = (char *)SND_int_timer_b_get() ;
  214.             SND_elevol_mute( 0x3 ) ;
  215.             SND_int_timer_b_set( (char *)int_handler ) ;
  216.  
  217.             KYB_clrbuf() ;                        /*  バッファクリア            */
  218.             TEXT_color( C_HGREEN ) ;
  219.             TEXT_printf( "\n何かキーを押して下さい。 \n" ) ;
  220.             TEXT_printf( "マウスのボタンを左右同時に押すと終了します。\n" ) ;
  221.             moji.x = KYB_read( 0,(unsigned int *)&encode ) ;
  222.             Icount = 0 ;
  223.             loop( func ) ;
  224.  
  225.             SND_int_timer_b_set( ofptr ) ;             /*  Restore Timer B    */
  226.             TEXT_color( C_LIGHTBLUE ) ;
  227.             TEXT_printf( "FM音源タイマB <END!> : %ld\n",Icount ) ;
  228.             secph = Icount % 100 ;
  229.             sec   = Icount / 100 ;
  230.             min   = sec / 60 ;
  231.             hour  = min / 60 ;
  232.             sec   %= 60 ;
  233.             min   %= 60 ;
  234.             TEXT_color( C_HYELLOW ) ;
  235.             TEXT_printf( "elaps time : %02d:%02d:%02d.%02d (Icount:%ld)\n",
  236.                     hour,min,sec,secph,Icount ) ;
  237.         }
  238.     }
  239.  
  240.     MOS_end() ;
  241.     SND_end() ;
  242.  
  243.     KYB_clrbuf() ;                            /*  バッファクリア            */
  244.     TEXT_color( C_HGREEN ) ;
  245.     TEXT_printf( "\n何かキーを押して下さい。 " ) ;
  246.     moji.x = KYB_read( 0,(unsigned int *)&encode ) ;
  247. /*
  248. **    コンソール画面に戻す
  249. */
  250.     EGB_init( Gwork,GworkSize ) ;         /*  ゴミを消すため EGB 初期化        */
  251.     EGB_clearScreen( Gwork ) ;
  252.     coninit() ;
  253. }
  254.  
  255.